#ifndef CONFIG_H
#define CONFIG_H

#define M_PI 3.14159265358979323846
#define _SCANNER_USES_UART1

// 电机移动时起始阶段的速度, x0.01 rad/sec
#define FIRST_STAGE_SPEED           2000

// 电机移动时结束阶段的速度, x0.01 rad/sec
#define SECOND_STAGE_SPEED          1000

// 电机移动时起始和结束阶段的距离, mm
#define FIRST_STAGE_DISTANCE        5

// 电机移动时起始和结束阶段的距离, mm
#define SECOND_STAGE_DISTANCE       15

// T电机转一圈的距离, mm
#define T1_PERIMETER                     (20 * M_PI)
// T电机缓冲距离, mm
#define T1_IMPORT_LIMIT_BUFFER_DISTANCE   7.0
#define T1_EXPORT_LIMIT_BUFFER_DISTANCE   20.0
#define T1_BACK_LIMIT_BUFFER_DISTANCE     120.0
#define T1_OUT_BUFFER_DISTANCE            300.0
#define T1_FIX_LIMIT_BUFFER_DISTANCE      500.0
// T电机转一圈的距离, mm
#define T2_PERIMETER                     (20 * M_PI)
// T电机缓冲距离, mm
#define T2_LIMIT_BUFFER_DISTANCE          20.0
#define T2_BACK_LIMIT_BUFFER_DISTANCE     100.0
#define T2_OUT_BUFFER_DISTANCE            200.0

// S电机转一圈的距离, mm
#define S1_PERIMETER                     (15 * 2.032)
// S电机目标距离, mm
#define S1_LIMIT_TARGET_DISTANCE          2.0
// S电机缓冲距离, mm
#define S1_LIMIT_BUFFER_DISTANCE          1.0
// S电机缓冲距离, mm
#define S1_LIMIT2_BUFFER_DISTANCE         8.0
// S电机缓冲距离, mm
#define S1_RESET_BUFFER_DISTANCE          6.0

// S电机目标位置后退距离, mm
#define S1_LIMIT_BACK_DISTANCE            4.0

// S电机转一圈的距离, mm
#define S2_PERIMETER                     (15 * 2.032)
// S电机缓冲距离, mm
#define S2_LIMIT_BUFFER_DISTANCE          1.0
// S电机缓冲距离, mm
#define S2_RESET_BUFFER_DISTANCE          8.0

// V电机复位缓冲步数
#define V_RESET_BUFFER_STEP                20
#define V_LIMIT_BUFFER_STEP                0
#define V_LIMIT_TARGET_STEP                200
// V电机使用的细分
#define V_MISCRO                           16



#define V3_PERIMETER                        (2.032 * 15)
// V电机复位缓冲步数
#define V3_RESET_BUFFER_DISTANCE            3.0
#define V3_LIMIT_BUFFER_DISTANCE            9.0
#define V3_RESET_BUFFER_STEP                (long)(V3_RESET_BUFFER_DISTANCE  * SPR / V3_PERIMETER)
#define V3_LIMIT_BUFFER_STEP                (long)(V3_LIMIT_BUFFER_DISTANCE  * SPR / V3_PERIMETER)
/**
 * 试管架中两个相邻试管的距离是相等的
 * 所以设置好第一个试管的距离，和试管架中两个试管的距离就可以完成退格功能
 * 经过测试,由于程序里设定了触发定位光耦后就认定试管到达指定位置,所以这里修改定位的意义仅是防止试管架惯性偏移
 */

// 定义试管架中两个相邻试管之间的距离，单位是毫米
// 这个值表示了相邻试管在空间上的固定间隔
#define V3_STRIDE_DISTANCE                  23

// 计算两个相邻试管之间对应的步进电机步数
#define V3_STRIDE_STEP                      (long)(V3_STRIDE_DISTANCE  * SPR / V3_PERIMETER)

// V3_INIT_COMPENSATE_DISTANCE 等于从 V3 的 limit 位置到第一个试管的距离，减去 V3_STRIDE_DISTANCE 的补偿距离
// 这个补偿距离用于修正从极限位置到第一个试管的实际位置偏差
#define V3_INIT_COMPENSATE_DISTANCE         (1.1)

// 计算从 V3 的 limit 位置到第一个试管的补偿步数
#define V3_INIT_COMPENSATE_STEP             (long)(V3_INIT_COMPENSATE_DISTANCE  * SPR / V3_PERIMETER)

/**
 * @brief 定义不同扫描位置对应的步进电机步数
 * @details 这些宏定义用于指定在不同扫描位置时，步进电机需要移动的步数
*/

// V3_SCAN_POS1_STEP 表示第一个扫描位置对应的步进电机步数
// 这里使用 V3_INIT_COMPENSATE_STEP，即从极限位置到第一个试管的补偿步数，作为第一个扫描位置的步数
#define V3_SCAN_POS1_STEP (long)(V3_STRIDE_STEP + V3_INIT_COMPENSATE_STEP)

// V3_SCAN_POS2_STEP 表示第二个扫描位置对应的步进电机步数
#define V3_SCAN_POS2_STEP (long)(V3_SCAN_POS1_STEP + V3_STRIDE_STEP)

// V3_SCAN_POS3_STEP 表示第三个扫描位置对应的步进电机步数
#define V3_SCAN_POS3_STEP (long)(V3_SCAN_POS2_STEP + V3_STRIDE_STEP)

// V3_SCAN_POS4_STEP 表示第四个扫描位置对应的步进电机步数
#define V3_SCAN_POS4_STEP (long)(V3_SCAN_POS3_STEP + V3_STRIDE_STEP)

// V3_SCAN_POS5_STEP 表示第五个扫描位置对应的步进电机步数
#define V3_SCAN_POS5_STEP (long)(V3_SCAN_POS4_STEP + V3_STRIDE_STEP)

#define R2_PERIMETER                        (2)
#define R2_RESET_BUFFER_DISTANCE            2.5
#define R2_RESET_BUFFER_STEP                (long)(R2_RESET_BUFFER_DISTANCE  * SPR / R2_PERIMETER)

// 位置码顺序从较小值递增
#define SCAN_FROM_SMALL_TO_LARGE

// 最大条码缓存数量
#define MAX_BAR_NUMBER              60

// 最大样本码长度
#define MAX_BAR_LEN                 16

// 位置码长度
#define POS_CODE_LEN                2

// 位置码最大值
#define MAX_POS_CODE_VALUE          5

// 一个试管架单元最大样本数量
#define MAX_SAMPLE_COUNTS_BY_UNIT   5

// 一个试管架单元最大试管架id数量
#define MAX_RACKID_COUNTS_BY_UNIT   1

#define BCL95

// 试管架码最大值
#define MAX_RACKID_CODE_VALUE       1000

// 试管架码内容长度RACKID(3)
#define RACKID_CODE_LEN             3

// 试管架码最大长度 STX + '#'+ RACKID(3) + '#' + 0x0D + 0x0A + 0x00
#define RACKID_CODE_MAX_LEN         7

#define BEEP_MULTI_FREQ             1

#define ENABLE_BEEP                 1
// 使用看门狗
#define USE_WATCHDG                 1

#endif // CONFIG_H9
